﻿// Copyright (c) 2012, XBRL Cloud Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer. Redistributions in
// binary form must reproduce the above copyright notice, this list of
// conditions and the following disclaimer in the documentation and/or
// other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.IO;
using System.Threading;
using System.ComponentModel.Composition.Hosting;
using System.ComponentModel.Composition;
using Nagios.Net.Client.Common;
using System.Reflection;

namespace Nagios.Net.Client
{
    public partial class NService : ServiceBase
    {
        Main _service;

        public NService()
        {
            InitializeComponent();
            _service = new Main();
        }

        public override EventLog EventLog
        {
            get
            {
                EventLog log = Log.GetLog();
                if (log != null)
                    return log;
                return base.EventLog;
            }
        }

        protected override void OnContinue()
        {
            _service.Config();
            _service.RunModules();
            WriteLog("Service resumed", false);

            base.OnContinue();
        }

        protected override void OnPause()
        {
            _service.StopModules();
            WriteLog("Service paused", false);
            base.OnPause();
        }

        protected override void OnStart(string[] args)
        {
            _service.Config();
            _service.RunModules();
            WriteLog("Service started", false);
        }

        protected override void OnStop()
        {
            _service.StopModules();
            WriteLog("Service stopped", false);
        }

        #region Log

        private void WriteLog(string msg, bool isError)
        {
            Log.WriteLog(msg, isError);
        }

        #endregion
    }
}
